import axios from 'axios';
import baseUrls from './config';  // 引入公用 baseUrl

// 创建 axios 实例
const service = axios.create({
    // baseURL: baseUrls.URL, // 直接设置基础 URL
    timeout: 5000,
});

// 请求拦截器
service.interceptors.request.use(
    config => {
        // 在这里可以添加请求前的操作
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    response => {
        return response.data;
    },
    error => handleResponseError(error)
);

// 处理响应错误
function handleResponseError(error) {
    const originalRequest = error.config;

    // 根据 HTTP 状态码进行错误处理
    if (error.response) {
        switch (error.response.status) {
            case 400:
                console.error('Bad Request:', error.response.data);
                break;
            case 401:
                console.error('Unauthorized:', error.response.data);
                return refreshToken(originalRequest).catch(err => Promise.reject(err));
            case 403:
                console.error('Forbidden:', error.response.data);
                break;
            case 404:
                console.error('Not Found:', error.response.data);
                break;
            case 408:
                console.error('Request Timeout:', error.response.data);
                break;
            case 429:
                console.error('Too Many Requests:', error.response.data);
                break;
            case 500:
                console.error('Internal Server Error:', error.response.data);
                break;
            case 502:
                console.error('Bad Gateway:', error.response.data);
                break;
            case 503:
                console.error('Service Unavailable:', error.response.data);
                break;
            case 504:
                console.error('Gateway Timeout:', error.response.data);
                break;
            default:
                console.error('Unknown Error:', error.response.data);
        }
    } else if (axios.isCancel(error)) {
        console.error('Request canceled:', error.message);
    } else {
        console.error('No Response Received:', error.message);
    }

    return Promise.reject(error);
}

// 刷新 Token
// function refreshToken(request) {
//     if (request._retry) {
//         // 防止无限循环
//         return Promise.reject(new Error('Token refresh failed'));
//     }
//     request._retry = true;

//     // 假设这里有一个函数用于刷新 Token
//     return new Promise((resolve, reject) => {
//         setTimeout(() => {
//             const newToken = 'new-token'; // 假设这是新的 Token
//             resolve(newToken);
//         }, 1000);
//     }).then(newToken => {
//         request.headers.Authorization = `Bearer ${newToken}`;
//         return service(request);
//     });
// }

// 发送请求
function request(url, options = {}) {
    const { method = 'GET', data = {}, ...rest } = options;
    const config = {
        url:baseUrls + url.url,
        method,
        ...rest,
    };
    if (['POST', 'PUT'].includes(method.toUpperCase())) {
        config.data = data;
    } else {
        config.params = data;
    }

    return service(config);
}

// 导出 request 方法
export default request;